
//todo
// 假设有k个人质和k个绑匪围成一圈。人质的编号从1到k，绑匪的编号从k+1到2k。
// 从编号1开始，每次从其中选出第m个人(隔m-1选出一人)出列。
// 希望求出m的最小值，使得最先出列的k个人都是绑匪，即都是编号从k+1到2k的人。
#include "iostream"
#include "vector"
#include "unordered_map"
#include "algorithm"

void print_yanghui(int b){
    std::vector<int> r(b,1);
    std::vector<int> q(b,1);
    bool cur_r= true;//当前往r写入
    if(b>=1){
        printf("1\n");
//        return;
    }
    if(b>=2){
        printf("1 1\n");
//        return;
    }

    for(int i=3;i<=b;i++){
        for(int j=0;j<i;j++){
            if(j==0){
                printf("1");
            }else if(j==i-1){
                printf(" 1\n");
            }else{
                if(cur_r){
                    r[j]=q[j]+q[j-1];
                    printf(" %d",r[j]);
                }else{
                    q[j]=r[j]+r[j-1];
                    printf(" %d",q[j]);
                }
            }
        }
        cur_r=!cur_r;
    }
}

int main() {
    int a;
//    int
//    is_huiwen(1441,10);
    while (std::cin >> a) {
        bool first= true;
        while(a){
            int b=0;
            std::cin>>b;
            if(!first){
                printf("\n");
            }
            first=false;
            print_yanghui(b);
            a--;
        }
    }
//    while(1){}
    return 0;
}

